#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<stdlib.h>
#include<errno.h>
#include<unistd.h>


int main(int argc, char const *argv[])
{
    //打开液晶屏
    //在6818中屏幕设备文件在"/dev/fb0"
    int lcd_fd = open("/dev/fb0",O_RDWR);
    if(lcd_fd<0)
    {
        perror("open() fail");
        exit(EXIT_FAILURE);
    }
#if 0
    int color=0xFF00FF;
    for(int i=0;i<800*480;i++)
    {
        write(lcd_fd,&color,sizeof(color));
    }
#endif

#if 0
    //定义颜色缓冲区
    int lcd_buf[800*480] = {};
    //准备颜色
    int x,y;
    for(y=0;y<480;y++)
    {
        for(x=0 ; x<800;x++)
        {
            if(y>=0 && y<160)
            {
                lcd_buf[y*800+x]=0xFF0000;
            }else if(y>=160 && y<320)
            {
                lcd_buf[y*800+x]=0xFF00FF;
            }else{
                lcd_buf[y*800+x]=0x00FF00;
            }
        }
    }
    //写入文件
    write(lcd_fd,lcd_buf,sizeof(lcd_buf));
#endif

#if 0
    //定义颜色缓冲区
    int lcd_buf[800*480] = {};
    //准备颜色
    int x,y;
    for(y=0;y<480;y++)
    {
        for(x=0 ; x<800;x++)
        {
            if(x>=0 && x<266)
            {
                lcd_buf[y*800+x]=0xFF0000;
            }else if(x>=266 && x<532)
            {
                lcd_buf[y*800+x]=0xFF00FF;
            }else{
                lcd_buf[y*800+x]=0x00FF00;
            }
        }
    }
    //写入文件
    write(lcd_fd,lcd_buf,sizeof(lcd_buf));
#endif


// 定时刷新颜色
#if 1
    //定义颜色缓冲区
    int lcd_buf[800*480] = {0};
    int colors[3] = {0xFF0000,0x00FF00,0x0000FF};
    //准备颜色
    int x,y,index=0;
    
    while(1)
    {
        for(y=0;y<480;y++)
        {
            for(x=0 ; x<800;x++)
            {
                lcd_buf[y*800+x]=colors[index];
            }
        }
        lseek(lcd_fd,0,SEEK_SET);//将偏移量定位到开头

        //把颜色缓冲区写入液晶屏文件
        write(lcd_fd,lcd_buf,sizeof(lcd_buf));
        printf("%#08X\n",colors[index++]);
        index %=3;
        sleep(1);
    }
#endif
    //关闭文件
    close(lcd_fd);
    return 0;
}
